/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.negocio.utilidades;

import com.mindbox.mueblesalpes.negocio.entity.CategoriaValor;
import com.mindbox.mueblesalpes.negocio.entity.Compra;
import com.mindbox.mueblesalpes.negocio.entity.Venta;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * Utilidades de las compras.
 * @author jsanchez
 */
public abstract class UtilidadesCompra {

    /**
     * Calcular el subtotal de las compras.
     * @param carritoCompras 
     * @return double
     */
    public static double calcularSubtotalCompra(List<Compra> carritoCompras) {
        double p_subtotal = 0;
        for (Compra compra : carritoCompras) {
            p_subtotal += compra.getPrecio() * compra.getCantidad();
        }
        return p_subtotal;
    }

    /**
     * Calcula el valor por cada categoria que se le va a cobrar al cliente.
     * @param subtotal
     * @return List<CategoriaValor>
     */
    public static List<CategoriaValor> calcularValorCategoriasCompra(double subtotal) {
        List<CategoriaValor> categorias = new ArrayList<CategoriaValor>();
        //TODO traer valores del properties.
        CategoriaValor categoria = new CategoriaValor();
        categoria.setNombreCategoria("Subtotal");
        categoria.setDescripcion("Subtotal de los productos");
        categoria.setValor(subtotal);
        categorias.add(categoria);

        categoria = new CategoriaValor();
        categoria.setNombreCategoria("Envio");
        categoria.setDescripcion("Costo del envío de los productos");
        categoria.setValor(Math.random() * 15000);
        categorias.add(categoria);
        return categorias;
    }

    /**
     * Calcula el valor total de la compra dados la categorías que se le va a cobrar al cliente.
     * @param categoriasValor
     * @return double
     */
    public static double calcularValorTotalCompra(List<CategoriaValor> categoriasValor) {
        double p_valor = 0;
        for (CategoriaValor categoria : categoriasValor) {
            p_valor += categoria.getValor();
        }
        return p_valor;
    }
    
    /**
     * Obtiene la descripción de la venta
     * @param venta
     * @return String
     */
    public static String calcularDescripcionVenta(Venta venta) {
        String ret = "";
        int cantidad = 0;
        for(Compra compra : venta.getCompras())
            cantidad+=compra.getCantidad();
        ret+= cantidad+" Muebles(s) - Codigos de Muebles(";
        for (Compra compra : venta.getCompras()) {
            ret += compra.getMueble().getReferencia()+" ";
        }
        ret += ")";
        return ret;
    }

    /**
     * Método para enviar un correo electronico.
     * @param para
     * @param asunto
     * @param cuerpo
     */
    public static void enviarCorreo(final String para, final String asunto, final String cuerpo){
        Thread hilo = new Thread() {
            @Override
            public void run() {
                Properties props = new Properties();

                // Nombre del host de correo, es smtp.gmail.com
                props.setProperty("mail.smtp.host", "smtp.gmail.com");

                // TLS si está disponible
                props.setProperty("mail.smtp.starttls.enable", "true");

                // Puerto de gmail para envio de correos
                props.setProperty("mail.smtp.port", "587");

                // Nombre del usuario
                props.setProperty("mail.smtp.user", "mindbox09@gmail.com");

                // Si requiere o no usuario y password para conectarse.
                props.setProperty("mail.smtp.auth", "true");

                Session session = Session.getDefaultInstance(props);
                session.setDebug(true);

                MimeMessage message = new MimeMessage(session);
                try {
                    // Quien envia el correo
                    message.setFrom(new InternetAddress("mindbox09@gmail.com"));

                    // A quien va dirigido
                    message.addRecipient(Message.RecipientType.TO, new InternetAddress(para));
                    message.setSubject(asunto);
                    message.setText(cuerpo);

                    Transport t = session.getTransport("smtp");
                    t.connect("mindbox09@gmail.com", "mindboxecos123");
                    t.sendMessage(message, message.getAllRecipients());

                    t.close();
                } catch (Exception e) {
                    System.out.println("Error al enviar el msg:" + e.getMessage());
                    e.printStackTrace();
                }
            }
        };
        hilo.start();
    }
}